package com.defeng.common.core.utils.array;

import com.defeng.common.core.exception.ServiceException;
import org.apache.poi.ss.formula.functions.T;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @ProjectName: lxdf-cloud-6.20
 * @Package: com.defeng.common.core.utils.array
 * @ClassName: ArrayUtils
 * @Author: 86158
 * @Description: 集合工具类
 * @Date: 2022/6/29 14:47
 * @Version: 1.0
 * 谢德丰
 */

public class ArrayUtils {
    /**
     * 截取集合
     * @param dataList 数据集合
     * @param subSum 每段长度
     * @param <T>
     * @return List<List><T>> 返回[[第一段],[第二段],[第三段]]
     */
    public static <T> List<List<T>> subList(List<T> dataList,int subSum) {
        if (subSum < 1){
            throw new ServiceException("截取集合的每段长度不可以小于1");
        }
        if (dataList == null || dataList.size() == 0){
            throw new ServiceException("被截取集合不可以为空");
        }
        List<List<T>> subDataList = new ArrayList<>();
        // 如果 被截取集合的长度小于截取每段长度那么就直接进行返回
        if(dataList.size() < subSum){
            subDataList.add(dataList);
            return subDataList;
        }
        //集合总长度
        int dataSize = dataList.size();
        //分多少段
        int total = dataSize / subSum + (dataSize % subSum ==0 ? 0 : 1);
        //进行分段
        for (int i = 0; i < total; i++) {
            int toIndex =(i+1)*subSum;
            List<T> datas =  dataList.subList(i * subSum,toIndex > dataSize ? dataSize:toIndex );
            subDataList.add(datas);
        }
        return subDataList;
    }
}
